package demo1;

import java.util.List;

/**
 * @Author liangzai
 * @Description:
 */
public class Training {
    public int maxValueOfCoins(List<List<Integer>> piles, int k) {
        int[] dp = new int[k+1];
        dp[0] = 1;
        int len = piles.size();
        // 预处理
        int[][] ans = new int[len][];
        for (int i = 0; i < piles.size(); i++) {
            List<Integer> list = piles.get(i);
            ans[i] = new int[list.size()];
            int m = 0;
            for (int j = 0; j < ans[i].length; j++) {
                ans[i][j] = m + list.get(j);
                m = ans[i][j];
            }
        }
        for (int i = 0; i < len; i++) {
            for (int j = k; j >= 0; j--) {
                for (int l = 0; l < ans[i].length && j-l-1 >= 0; l++) {
                    if (dp[j-l-1] <= 0) continue;
                    dp[j] = Math.max(dp[j], dp[j-l-1] + ans[i][l]);
                }
            }
        }
        return dp[k] - 1;
    }

    public String bestHand(int[] ranks, char[] suits) {
        char suit = suits[0]; // 记录首个花色
        // 遍历所有手牌的花色
        for(char s: suits) {
            // 判断是否有不同得花色
            if (s != suit) {
                // 花色不同就将 s 对应的花色赋值给 suit
                suit = s;
                break;
            }
        }
        // 判断五个花色是否相同，全部相同时输出 Flush
        if(suit == suits[0]) {
            return "Flush";
        }
        // 定义统计手牌大小的数组
        int[] counts = new int[13];
        // 遍历统计每个数字出现的次数
        for(int num: ranks) {
            // 手牌的值对应的数组下标自增
            counts[num - 1]++;
        }
        // 找出出现次数最多的次数
        int maxCount = 1;
        // 遍历统计好手牌大小出现次数
        for(int count: counts){
            //通过函数找出出现最多的手牌大小
            maxCount = Math.max(count, maxCount);
        }
        // 判断是否为 三条
        if (maxCount >= 3) {
            return "Three of a Kind";
        }else if (maxCount == 2){
            // 判断是否为 对子
            return "Pair";
        }else {
            //判断是否为 高牌
            return "High Card";
        }
    }

    public int romanToInt(String s) {
        s = s.replace("IV","a");
        s = s.replace("IX","b");
        s = s.replace("XL","c");
        s = s.replace("XC","d");
        s = s.replace("CD","e");
        s = s.replace("CM","f");

        int res = 0;
        for (int i = 0; i < s.length(); i++) {
            res += getValue(s.charAt(i));
        }
        return res;
    }

    public int getValue(char c) {
        switch(c) {
            case 'I': return 1;
            case 'V': return 5;
            case 'X': return 10;
            case 'L': return 50;
            case 'C': return 100;
            case 'D': return 500;
            case 'M': return 1000;
            case 'a': return 4;
            case 'b': return 9;
            case 'c': return 40;
            case 'd': return 90;
            case 'e': return 400;
            case 'f': return 900;
        }
        return 0;
    }
}
